package everyday;

/**
 * @author zhangmin
 * @create 2022-04-25 13:30
 * 有效数字（按顺序）可以分成以下几个部分：
 *
 * 一个 小数 或者 整数
 * （可选）一个 'e' 或 'E' ，后面跟着一个 整数
 * 小数（按顺序）可以分成以下几个部分：
 *
 * （可选）一个符号字符（'+' 或 '-'）
 * 下述格式之一：
 * 至少一位数字，后面跟着一个点 '.'
 * 至少一位数字，后面跟着一个点 '.' ，后面再跟着至少一位数字
 * 一个点 '.' ，后面跟着至少一位数字
 * 整数（按顺序）可以分成以下几个部分：
 *
 * （可选）一个符号字符（'+' 或 '-'）
 * 至少一位数字
 * 给你一个字符串 s ，如果 s 是一个 有效数字 ，请返回 true 。
 *
 * 直接模拟
 */
public class isNumber65 {
    int index=0;
    boolean isInteger(String s){
        if (index==s.length()) return false;
        if (s.charAt(index)=='-'||s.charAt(index)=='+'){
            index++;
        }
        return isUnsignedInt(s);
    }
    boolean isUnsignedInt(String s){
        int start=index;
        while (index<s.length()&&s.charAt(index)>='0'&&s.charAt(index)<='9'){
            index++;
        }
        return  index>start;
    }
    public boolean isNumber(String s) {
        int n=s.length();
        if (n==0) return false;
        boolean res=isInteger(s);
        if (index==n) return res;
        if (s.charAt(index)=='.'){
            index++;
            res=isUnsignedInt(s)||res;
        }
        if (index==n) return res;
        if (s.charAt(index)=='E'||s.charAt(index)=='e'){
            index++;
            res=res&isInteger(s);
        }
        return (index==n)&&res;
    }
}
